home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / libast / objpair.h < prev    next >
C/C++ Source or Header  |  2005-10-18  |  9KB  |  241 lines

  1. /*
  2.  * Copyvalue (C) 1997-2004, Michael Jennings
  3.  *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a copy
  5.  * of this software and associated documentation files (the "Software"), to
  6.  * deal in the Software without restriction, including without limitation the
  7.  * values to use, copy, modify, merge, publish, distribute, sublicense, and/or
  8.  * sell copies of the Software, and to permit persons to whom the Software is
  9.  * furnished to do so, subject to the following conditions:
  10.  *
  11.  * The above copyvalue notice and this permission notice shall be included in
  12.  * all copies of the Software, its documentation and marketing & publicity
  13.  * materials, and acknowledgment shall be given in the documentation, materials
  14.  * and software packages that this Software was used.
  15.  *
  16.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  19.  * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
  20.  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  21.  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  22.  */
  23.  
  24. #ifndef _LIBAST_OBJPAIR_H_
  25. #define _LIBAST_OBJPAIR_H_
  26.  
  27.  
  28. /**
  29.  * @file objpair.h
  30.  * LibAST Object Infrastructure -- Paired Objects
  31.  *
  32.  * This file contains the declarations for the paired object type.
  33.  *
  34.  * @author Michael Jennings <mej@eterm.org>
  35.  * $Revision: 1.3 $
  36.  * $Date: 2004/03/01 19:22:48 $
  37.  */
  38.  
  39. /*@{*/
  40. /**
  41.  * @name Paired Object Macros
  42.  * ---
  43.  *
  44.  * This set of macros 
  45.  *
  46.  * @ingroup DOXGRP_OBJPAIR
  47.  */
  48.  
  49. /**
  50.  * Cast an arbitrary object to an objpair.
  51.  *
  52.  * This macro allows an arbitrary object of any valid object type
  53.  * (i.e., anything derived from spif_objpair_t) to be treated as a generic
  54.  * objpair (the spif_objpair_t type).
  55.  *
  56.  * @param o An objpair, or a descendent thereof.
  57.  * @return  An objpair reference to that object.
  58.  *
  59.  * @see @link DOXGRP_OBJPAIR Paired Objects @endlink, SPIF_CAST()
  60.  */
  61. #define SPIF_OBJPAIR(o)                    (SPIF_CAST(objpair) (o))
  62.  
  63. /**
  64.  * Determine if an arbitrary object is of type "objpair."
  65.  *
  66.  * This macro returns a boolean value based on whether or not the
  67.  * object passed to it is of type "objpair."
  68.  *
  69.  * @param o The object to test.
  70.  * @return  Whether or not the object is of type "objpair."
  71.  *
  72.  * @see @link DOXGRP_OBJPAIR Paired Objects @endlink, SPIF_OBJ_IS_TYPE()
  73.  */
  74. #define SPIF_OBJ_IS_OBJPAIR(o)             (SPIF_OBJ_IS_TYPE(o, objpair))
  75.  
  76. /**
  77.  * Determine if an object of type "objpair" is NULL.
  78.  *
  79.  * This macro returns a boolean value based on whether or not the
  80.  * object passed to it is NULL.  The object is cast to type "objpair"
  81.  * before the comparison, so it should work for any valid object.
  82.  * This macro will not often be used by user code.  However, each
  83.  * object type needs to define a macro like this named
  84.  * SPIF_xxx_ISNULL() (where xxx is the object type), so this macro
  85.  * serves as a template for how those should be written.
  86.  *
  87.  * @param o The object to test.
  88.  * @return  Whether or not the object is NULL.
  89.  *
  90.  * @see @link DOXGRP_OBJPAIR Paired Objects @endlink, SPIF_OBJPAIR(), SPIF_NULL_TYPE()
  91.  */
  92. #define SPIF_OBJPAIR_ISNULL(o)             (SPIF_OBJPAIR(o) == SPIF_NULL_TYPE(objpair))
  93.  
  94. /**
  95.  * Create an instance of a objpair.
  96.  *
  97.  * This macro allocates and returns an object of type "objpair."
  98.  *
  99.  * @return An allocated object of type "objpair."
  100.  *
  101.  * @see @link DOXGRP_OBJPAIR Paired Objects @endlink, spif_objpair_new()
  102.  */
  103. #define SPIF_OBJPAIR_NEW()                   SPIF_CAST(objpair) (SPIF_CLASS(SPIF_CLASS_VAR(objpair)))->(noo)()
  104.  
  105. /**
  106.  * Initialize an objpair.
  107.  *
  108.  * This macro calls the @c init method of an objpair in order to
  109.  * initialize it.
  110.  *
  111.  * @param o An already-allocated objpair.
  112.  * @return  #TRUE if successful, #FALSE otherwise.
  113.  *
  114.  * @see @link DOXGRP_OBJPAIR Paired Objects @endlink, spif_objpair_init()
  115.  */
  116. #define SPIF_OBJPAIR_INIT(o)                 SPIF_CAST(bool) (SPIF_OBJPAIR_CALL_METHOD((o), init)(o))
  117.  
  118. /**
  119.  * Clean up an objpair.
  120.  *
  121.  * This macro calls the @c done method of an objpair.  This basically
  122.  * restores it to its original allocated-and-initialized state.
  123.  *
  124.  * @param o An objpair.
  125.  * @return  #TRUE if successful, #FALSE otherwise.
  126.  *
  127.  * @see @link DOXGRP_OBJPAIR Paired Objects @endlink, spif_objpair_done()
  128.  */
  129. #define SPIF_OBJPAIR_DONE(o)                 SPIF_CAST(bool) (SPIF_OBJPAIR_CALL_METHOD((o), done)(o))
  130.  
  131. /**
  132.  * Delete an objpair.
  133.  *
  134.  * This macro calls the @c del method of an objpair, destroying it and
  135.  * freeing its memory.
  136.  *
  137.  * @param o An objpair.  It will cease to exist after this call.
  138.  * @return  #TRUE if successful, #FALSE otherwise.
  139.  *
  140.  * @see @link DOXGRP_OBJPAIR Paired Objects @endlink, spif_objpair_del()
  141.  */
  142. #define SPIF_OBJPAIR_DEL(o)                  SPIF_CAST(bool) (SPIF_OBJPAIR_CALL_METHOD((o), del)(o))
  143.  
  144. /**
  145.  * Convert the contents of an objpair to a string.
  146.  *
  147.  * This macro calls the @c show method of an objpair, returning a
  148.  * spif_str_t object containing its string representation.
  149.  *
  150.  * @param o The objpair to display.
  151.  * @param b An existing spif_str_t buffer to use.  If NULL, a new str
  152.  *          object will be created and returned.
  153.  * @param i Number of leading spaces to indent.
  154.  * @return  A str object containing the string representation of @a o.
  155.  *
  156.  * @see @link DOXGRP_OBJPAIR Paired Objects @endlink, spif_objpair_show(), SPIF_SHOW()
  157.  */
  158. #define SPIF_OBJPAIR_SHOW(o, b, i)           SPIF_CAST(str) (SPIF_OBJPAIR_CALL_METHOD((o), show)(o, #o, b, i))
  159.  
  160. /**
  161.  * Compare two objpairs.
  162.  *
  163.  * This macro calls the @c comp method of objpair #1 to compare the two
  164.  * objpairs.
  165.  *
  166.  * @param o1 Objpair #1.
  167.  * @param o2 Objpair #2.
  168.  * @return   A spif_cmp_t value containing the comparison result.
  169.  *
  170.  * @see @link DOXGRP_OBJPAIR Paired Objects @endlink, spif_objpair_comp(), spif_comp_t
  171.  */
  172. #define SPIF_OBJPAIR_COMP(o1, o2)            SPIF_CAST(cmp) (SPIF_OBJPAIR_CALL_METHOD((o1),  comp)(o1, o2))
  173.  
  174. /**
  175.  * Duplicate an objpair.
  176.  *
  177.  * This macro calls the @c dup method of an objpair.  A copy of the
  178.  * objpair is returned.
  179.  *
  180.  * @param o An objpair.
  181.  * @return  A duplicate of that objpair.
  182.  *
  183.  * @see @link DOXGRP_OBJPAIR Paired Objects @endlink, spif_objpair_dup()
  184.  */
  185. #define SPIF_OBJPAIR_DUP(o)                  SPIF_CAST(objpair) (SPIF_OBJPAIR_CALL_METHOD((o), dup)(o))
  186.  
  187. /**
  188.  * Obtain the type of the objpair.
  189.  *
  190.  * This macro calls the @c type method of an objpair to obtain its
  191.  * classname.
  192.  *
  193.  * @param o An objpair.
  194.  * @return  The classname of that objpair.
  195.  *
  196.  * @see @link DOXGRP_OBJPAIR Paired Objects @endlink, spif_objpair_type(), SPIF_OBJPAIR_CLASSNAME()
  197.  */
  198. #define SPIF_OBJPAIR_TYPE(o)                 SPIF_CAST(classname) (SPIF_OBJPAIR_CALL_METHOD((o), type)(o))
  199.  
  200.  
  201. /**
  202.  * Objpair structure.
  203.  *
  204.  * This class contains the objpair structure.  It contains the
  205.  * parent type (obj) and all member variables.
  206.  *
  207.  * @note Doxygen doesn't understand how to handle the macro-based
  208.  * class definition for this structure, so it thinks it's a function.
  209.  * It's actually a struct definition (spif_const_objpair_t) and a
  210.  * pointer definition (spif_objpair_t) as provided by the
  211.  * SPIF_DECL_OBJ() macro.
  212.  *
  213.  * @see @link DOXGRP_OBJPAIR Paired Objects @endlink, SPIF_OBJPAIR_CALL_METHOD()
  214.  */
  215. SPIF_DECL_OBJ(objpair) {
  216.     SPIF_DECL_PARENT_TYPE(obj);
  217.     SPIF_DECL_PROPERTY(obj, key);
  218.     SPIF_DECL_PROPERTY(obj, value);
  219. };
  220. /*@}*/
  221.  
  222. extern spif_class_t SPIF_CLASS_VAR(objpair);
  223. extern spif_objpair_t spif_objpair_new(void);
  224. extern spif_objpair_t spif_objpair_new_from_key(spif_obj_t key);
  225. extern spif_objpair_t spif_objpair_new_from_value(spif_obj_t value);
  226. extern spif_objpair_t spif_objpair_new_from_both(spif_obj_t key, spif_obj_t value);
  227. extern spif_bool_t spif_objpair_del(spif_objpair_t self);
  228. extern spif_bool_t spif_objpair_init(spif_objpair_t self);
  229. extern spif_bool_t spif_objpair_init_from_key(spif_objpair_t self, spif_obj_t key);
  230. extern spif_bool_t spif_objpair_init_from_value(spif_objpair_t self, spif_obj_t value);
  231. extern spif_bool_t spif_objpair_init_from_both(spif_objpair_t self, spif_obj_t key, spif_obj_t value);
  232. extern spif_bool_t spif_objpair_done(spif_objpair_t self);
  233. extern spif_str_t spif_objpair_show(spif_objpair_t self, spif_charptr_t name, spif_str_t buff, size_t indent);
  234. extern spif_cmp_t spif_objpair_comp(spif_objpair_t self, spif_obj_t other);
  235. extern spif_objpair_t spif_objpair_dup(spif_objpair_t self);
  236. extern spif_classname_t spif_objpair_type(spif_objpair_t self);
  237. SPIF_DECL_PROPERTY_FUNC(objpair, obj, key);
  238. SPIF_DECL_PROPERTY_FUNC(objpair, obj, value);
  239.  
  240. #endif /* _LIBAST_OBJPAIR_H_ */
  241.